package com.wlanauth.web.util;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;

import javax.imageio.ImageIO;

/**
 * 验证码
 * @author zz
 *
 */
public class ValidateImgPainter {
	
	private OutputStream outputStream;
	
	private int charLength = 4;
	public ValidateImgPainter(OutputStream outputStream){
		this.outputStream = outputStream;
	}
	
	public String genValidateString(){
		String chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
		char[] target = new char[charLength];
		int len = chars.length();
		for(int i=0;i<charLength;i++){
		
			target[i]=chars.charAt((int)Math.round(Math.random()*(len-1)));
			
		}
		return new String(target);
	}
	private Color getRandColor(int fc,int bc){//给定范围获得随机颜色
	   Random random = new Random();
	   if(fc>255) fc=255;
	   if(bc>255) bc=255;
	   int r=fc+random.nextInt(bc-fc);
	   int g=fc+random.nextInt(bc-fc);
	   int b=fc+random.nextInt(bc-fc);
	   return new Color(r,g,b);
	}
	public String draw(String chars) throws IOException{
		
		int width=chars.length()*15, height=20;
		
	    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

	    // 获取图形上下文
	    Graphics g = image.getGraphics();

	    //生成随机类
	    Random random = new Random();

	    // 设定背景色
	    g.setColor(getRandColor(200,250));
	    g.fillRect(0, 0, width, height);

	    //设定字体
	    g.setFont(new Font("Times New Roman",Font.PLAIN,18));
	    
	 // 随机产生155条干扰线，使图象中的认证码不易被其它程序探测到
	    g.setColor(getRandColor(160,200));
	    for (int i=0;i<155;i++){
		  int x = random.nextInt(width);
		  int y = random.nextInt(height);
		  int xl = random.nextInt(12);
		  int yl = random.nextInt(12);
		  g.drawLine(x,y,x+xl,y+yl);
	    }
	    for(int i=0;i<chars.length();i++){
			g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
			g.drawString(""+chars.charAt(i),13*i+6,16);
	    }
	    g.dispose();
		ImageIO.write(image, "JPEG", this.outputStream);
		return chars;
	}
	
	
}
